package top.someapp.applib.kits;

import android.util.Log;
import androidx.annotation.NonNull;
import java.util.Locale;

/**
 * 对android.util.Log的封装，集中处理日志输出，避免在release时需要到各个地方去修改Log.xxx
 *
 * @author zwz
 * Created on 2019-10-25
 */
public final class Logs {

    public static final int LV_VERBOSE = Log.VERBOSE;
    private static int logLevel = Log.INFO;

    private Logs() {
        // no need instance.
    }

    public static void setLogLevel(int logLevel) {
        if (logLevel > 0) {
            Logs.logLevel = logLevel;
        }
    }

    public static boolean isEnabledV() {
        return logLevel <= LV_VERBOSE;
    }

    public static boolean isEnabledD() {
        return logLevel <= Log.DEBUG;
    }

    public static boolean isEnabledI() {
        return logLevel <= Log.INFO;
    }

    public static void v(@NonNull String tag, @NonNull String message) {
        if (isEnabledV()) {
            Log.v(tag, message);
        }
    }

    public static void v(@NonNull String tag, @NonNull String message, @NonNull Throwable tr) {
        if (isEnabledV()) {
            Log.v(tag, message, tr);
        }
    }

    public static void v(@NonNull String tag, @NonNull String format, Object... args) {
        if (isEnabledV()) {
            Log.v(tag, formatZhCN(format, args));
        }
    }

    public static void d(@NonNull String tag, @NonNull String message) {
        if (isEnabledD()) {
            Log.d(tag, message);
        }
    }

    public static void d(@NonNull String tag, @NonNull String message, @NonNull Throwable tr) {
        if (isEnabledD()) {
            Log.d(tag, message, tr);
        }
    }

    public static void i(@NonNull String tag, @NonNull String message) {
        if (isEnabledI()) {
            Log.i(tag, message);
        }
    }

    public static void i(@NonNull String tag, @NonNull String message, @NonNull Throwable tr) {
        if (isEnabledI()) {
            Log.i(tag, message, tr);
        }
    }

    public static void i(@NonNull String tag, @NonNull String format, Object... args) {
        if (isEnabledI()) {
            Log.i(tag, formatZhCN(format, args));
        }
    }

    public static void w(@NonNull String tag, @NonNull String message) {
        Log.w(tag, message);
    }

    public static void w(@NonNull String tag, @NonNull String message, @NonNull Throwable tr) {
        Log.w(tag, message, tr);
    }

    public static void w(@NonNull String tag, @NonNull String format, Object... args) {
        Log.w(tag, formatZhCN(format, args));
    }

    public static void e(@NonNull String tag, @NonNull String message) {
        Log.e(tag, message);
    }

    public static void e(@NonNull String tag, @NonNull String message, @NonNull Throwable tr) {
        Log.e(tag, message, tr);
    }

    public static void e(@NonNull String tag, @NonNull String format, Object... args) {
        Log.e(tag, formatZhCN(format, args));
    }

    private static String formatZhCN(String format, Object... args) {
        return String.format(Locale.SIMPLIFIED_CHINESE, format, args);
    }
}
